{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "31582d41-b09f-4ed0-8806-2b9d179829c7",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "d60969f9-fefb-4d95-ba4b-6d80d6fcae23",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import MinMaxScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ad5e70b2-4ad8-4955-959e-779b5f6d8b52",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "from sklearn.linear_model import Lasso"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1909ec60-9d8c-44b6-aefe-2d56374d4eb4",
   "metadata": {},
   "source": [
    "# 基于岭回归和Lasso回归的波士顿房价预测"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "519ed306-7d55-488c-9967-4c9453304e88",
   "metadata": {},
   "source": [
    "## 一、导入数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "53ee3746-367d-4bf5-8d86-bb231f4f3c0a",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_url = \"http://lib.stat.cmu.edu/datasets/boston\"\n",
    "raw_df = pd.read_csv(data_url, sep=\"\\s+\", skiprows=22, header=None)\n",
    "data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])\n",
    "target = raw_df.values[1::2, 2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ee526960-2bb3-4ff2-8ebd-674e3404c384",
   "metadata": {},
   "outputs": [],
   "source": [
    "feature_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2b1a5986-cf95-4762-be42-25f486be4c13",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(data=data, columns=feature_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "836d194a-ca8c-419b-b40b-fa2cf894107b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>RAD</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.00632</td>\n",
       "      <td>18.0</td>\n",
       "      <td>2.31</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.538</td>\n",
       "      <td>6.575</td>\n",
       "      <td>65.2</td>\n",
       "      <td>4.0900</td>\n",
       "      <td>1.0</td>\n",
       "      <td>296.0</td>\n",
       "      <td>15.3</td>\n",
       "      <td>396.90</td>\n",
       "      <td>4.98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.02731</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>6.421</td>\n",
       "      <td>78.9</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2.0</td>\n",
       "      <td>242.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>396.90</td>\n",
       "      <td>9.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.02729</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>7.185</td>\n",
       "      <td>61.1</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2.0</td>\n",
       "      <td>242.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>392.83</td>\n",
       "      <td>4.03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.03237</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>6.998</td>\n",
       "      <td>45.8</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3.0</td>\n",
       "      <td>222.0</td>\n",
       "      <td>18.7</td>\n",
       "      <td>394.63</td>\n",
       "      <td>2.94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.06905</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>7.147</td>\n",
       "      <td>54.2</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3.0</td>\n",
       "      <td>222.0</td>\n",
       "      <td>18.7</td>\n",
       "      <td>396.90</td>\n",
       "      <td>5.33</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      CRIM    ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD    TAX  \\\n",
       "0  0.00632  18.0   2.31   0.0  0.538  6.575  65.2  4.0900  1.0  296.0   \n",
       "1  0.02731   0.0   7.07   0.0  0.469  6.421  78.9  4.9671  2.0  242.0   \n",
       "2  0.02729   0.0   7.07   0.0  0.469  7.185  61.1  4.9671  2.0  242.0   \n",
       "3  0.03237   0.0   2.18   0.0  0.458  6.998  45.8  6.0622  3.0  222.0   \n",
       "4  0.06905   0.0   2.18   0.0  0.458  7.147  54.2  6.0622  3.0  222.0   \n",
       "\n",
       "   PTRATIO       B  LSTAT  \n",
       "0     15.3  396.90   4.98  \n",
       "1     17.8  396.90   9.14  \n",
       "2     17.8  392.83   4.03  \n",
       "3     18.7  394.63   2.94  \n",
       "4     18.7  396.90   5.33  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9563dcd3-b26a-4950-acfd-c73a2732a753",
   "metadata": {},
   "source": [
    "## 二、划分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "21157743-da30-44e5-8116-f33018d88be3",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=46, random_state=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f282a7e4-0d53-4581-800f-5bf58ed58703",
   "metadata": {},
   "source": [
    "## 三、数据预处理（归一化）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "ed784c2d-a965-45f6-86bd-36ed88acfe09",
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler = MinMaxScaler()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "8b11ac0a-77b5-4ae8-961d-377ae85598fa",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "X_test_scaled = scaler.fit_transform(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fcfd5273-3d24-419a-8aa8-fb666117dccb",
   "metadata": {},
   "source": [
    "## 四、基于岭回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "8417cd21-9dc8-4adf-898c-519f887e837a",
   "metadata": {},
   "outputs": [],
   "source": [
    "ridge = Ridge()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "4d2a8b89-ebbe-4fa9-9c64-b4688b82fccf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Ridge()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">Ridge</label><div class=\"sk-toggleable__content\"><pre>Ridge()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "Ridge()"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ridge.fit(X_train_scaled, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "fd1c91ae-f38f-4de5-9c7f-41890e9b5cd5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6684626684007112"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ridge_score = ridge.score(X_test_scaled, y_test)\n",
    "ridge_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "1e0a97ac-9aff-4e62-b1b2-fcf77d6ed41f",
   "metadata": {},
   "outputs": [],
   "source": [
    "ridge_w = ridge.coef_\n",
    "ridge_b = ridge.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "c341232c-6ba7-4514-856a-be78f894b407",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ -4.38763248,   3.59285903,   0.06580682,   3.05692708,\n",
       "        -7.06574868,  18.08024794,   0.33560646, -12.58573308,\n",
       "         5.24187579,  -5.24094657,  -8.5674282 ,   3.78211551,\n",
       "       -18.89501721])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "25.847696568589356"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(ridge_w, ridge_b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "c3fad53a-30ba-4da6-8e54-c6b253d1b1c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X_test_scaled[:, -1], y_test)\n",
    "x = np.linspace(0, 1, num=10)\n",
    "plt.plot(x, ridge_w[-1]*x+ridge_b, c='r')\n",
    "plt.title('Ridge\\nfeature:LSTAT\\n score:{0}'.format(ridge_score))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44519856-7190-45b8-99e1-573023676237",
   "metadata": {},
   "source": [
    "## 五、基于Lasso回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "6c680da2-959c-4d5a-9a60-c8f8f0a4fa3a",
   "metadata": {},
   "outputs": [],
   "source": [
    "lasso = Lasso(alpha=0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "d9be5d24-6a85-4ecb-b8b3-6afb8b8f1ada",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-9 {color: black;}#sk-container-id-9 pre{padding: 0;}#sk-container-id-9 div.sk-toggleable {background-color: white;}#sk-container-id-9 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-9 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-9 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-9 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-9 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-9 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-9 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-9 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-9 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-9 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-9 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-9 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-9 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-9 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-9 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-9 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-9 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-9 div.sk-item {position: relative;z-index: 1;}#sk-container-id-9 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-9 div.sk-item::before, #sk-container-id-9 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-9 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-9 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-9 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-9 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-9 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-9 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-9 div.sk-label-container {text-align: center;}#sk-container-id-9 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-9 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-9\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Lasso(alpha=0.1)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-9\" type=\"checkbox\" checked><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">Lasso</label><div class=\"sk-toggleable__content\"><pre>Lasso(alpha=0.1)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "Lasso(alpha=0.1)"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lasso.fit(X_train_scaled, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "6e6c36ad-7699-484e-9f0c-dcebb2f6c0df",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6576539466485214"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lasso_score = lasso.score(X_test_scaled, y_test)\n",
    "lasso_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "b435dba1-344b-4f6b-818a-dbc161d1029c",
   "metadata": {},
   "outputs": [],
   "source": [
    "lasso_w = lasso.coef_\n",
    "lasso_b = lasso.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "b72d5256-030a-418f-b7a7-4265fbdbbf5e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X_test_scaled[:, -1], y_test)\n",
    "x = np.linspace(0, 1, num=10)\n",
    "plt.plot(x, lasso_w[-1]*x+lasso_b, c='r')\n",
    "plt.title('Lasso\\nfeature:LSTAT\\n score:{0}'.format(lasso_score))\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74f69997-bfd3-4478-af03-87723a253007",
   "metadata": {},
   "source": [
    "## 六、岭回归和Lasso回归对比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "56daf16e-b70f-4c8c-a3e7-7dd7a1c2f80d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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G/V3c+bMGWJjY9myZQvvvPMOP/rRj1izZg0ul4utW7eyfPlyysvLGTduHGPHjqVLly689957HDx4EIfDwbx58/jb3/7GD37wAx599FG6d+/O2bNnufnmm/nd737HAw880Kj+nKvBABeRr4DhtbQXANOb9epKKZ9AR8otzTsHXlZWxqxZs3jqqad8Yd0cVVVVbNiwgdjY2Dofc+211zJmzBjef/99Lr/8cv7nf/6nSa+VkJDge02Hw9HgDcJevXpx5MgR38d5eXn06nX+IK53795ceeWVAMydO5cbb7zR196pUycSEhJISEhg0qRJfPbZZwCkpaXhvd935ZVXsn79en7wgx/Qo0cPAGJiYrjxxhv5wx/+0KRrrU5roSilAIiPj2fRokU8/vjj590MnDRpEq+99hoAu3btYseOHQCMHj2aVatWUVhYiMvl4u9//7vva2bOnMmf//xn38e1hepXX33FgAEDuO2227jiiivYsWMH06ZN46233qKgoADAN4Vy8cUX+24Ivvrqq0ycOPG850tOTiYtLc13U1FEfMFa3ezZs1m8eDFnzpzh4MGD7N+/n5ycnPMeN2fOHFasWAHAqlWrGDx4MABXXHEFa9eu9c1zb9y4kaFDh9K3b182bNhAWVkZIsLy5csZOnQoAMeOHfP1acmSJb77C82hAa6U8hkxYgRZWVm8/vrrNdpvueUWSktLGTp0KA888AAXXXQRYI1kf/3rX5OTk8P48ePp378/KSkpAL7VGFlZWQwbNoxnnnnmvNd78803ycjIIDs7m127dnH99deTnp7O/fffz+TJkxk+fDh33nknAH/+85958cUXycrK4pVXXuFPf/pTrdfw6quv8vzzzzN8+HDS09N57z3r9tzSpUt9Uxbp6el873vfY9iwYVx66aU89dRTRERYixkuv/xyjh49CsC9997L3//+dzIzM7nvvvt47rnnABg6dCiXXnopWVlZ5OTk8OMf/5iMjAzGjBnD1VdfzciRI8nMzKSqqoqbb7ZWXl933XVkZmaSmZnJyZMn+c1vftP0b5SHsVYAto5Ro0aJ3deOKtWS9uzZ4xuh2ZV3XtvlcjF37lx+9KMfMXfu3FB3y7Zq+zdhjNlabRe8j47AlVLN8tBDD/k2AqWlpTFnzpxQdylsaDVCpVSztMTNONU0OgJXSimb0gBXSimb0gBXSimb0gBX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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X_test_scaled[:, -1], y_test)\n",
    "x = np.linspace(0, 1, num=10)\n",
    "plt.plot(x, ridge_w[-1]*x+ridge_b, c='c', label='Ridge score:{0:.4f}'.format(ridge_score))\n",
    "plt.plot(x, lasso_w[-1]*x+lasso_b, c='r', label='Lasso score:{0:.4f}'.format(lasso_score))\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "33c18300-b3be-4bcc-8f00-f26e739e83c2",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
